﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
//#include<stdio.h>
//
//int main()
//{
//	printf("hello world\n");
//	return 0;
//}

//#include<iostream>
//using namespace std;
//int main()
//{
//	cout << "hello world\n" << endl;
//
//	return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
//
////域
//namespace bit
//{
//	int rand = 10;
//}
//
//int a = 0;
//int main()
//{
//	printf("%p\n", rand);
//	printf("%d\n", bit::rand);
//	int a = 1;
//	printf("%d\n", a);
//	//:: 域作用限定符
//	//C++中域有函数局部域，全局域，命名空间域，类域；
//	// 局部域和全局域影响编译查找逻辑和变量的生命周期
//	//命名空间域和类域不影响变量生命周期
//	printf("%d\n", ::a);
//
//	return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
//
////域
//namespace wbr
//{
//	int rand = 10;
//
//	int Add(int left, int right)
//	{
//		return left + right;
//	}
//
//	struct Node
//	{
//		struct Node* next;
//		int val;
//	};
//}
//
//int main()
//{
//	printf("%d\n", wbr::Add(1, 1));
//
//	struct wbr::Node p1;
//
//	return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
////域
//namespace wbr
//{
//	namespace pg
//	{
//		int rand = 1;
//		int Add(int left, int right)
//		{
//			return left + right;
//		}
//	}
//	namespace hg
//	{
//		int rand = 2;
//		int Add(int left, int right)
//		{
//			return (left + right) * 10;
//		}
//	}
//}
//int main()
//{
//	printf("%d\n", wbr::pg::Add(1, 1));
//	printf("%d\n", wbr::hg::Add(1, 1));
//
//	printf("%d\n", wbr::pg::rand);
//	printf("%d\n", wbr::hg::rand);
//	return 0;
//}
//namespace wbr
//{
//	int a = 0;
//	int b = 1;
// }
//
////using namespace wbr;
//using wbr::a;
//int main()
//{
//	printf("%d\n", a);
//	printf("%d\n", wbr::b);
//
//	return 0;
//}
//#include<iostream>
//using namespace std;
//
//int main()
//{
//	int i = 1234;
//	int j = -1234;
//	cout << i << endl;
//	cout << j << endl;
//
//	return 0;
//}
//#include<iostream>
//using namespace std;
//int main()
//{
//	// 在io需求⽐较⾼的地⽅，如部分⼤量输⼊的竞赛题中，加上以下3⾏代码
//	// 可以提⾼C++IO效率
//	ios_base::sync_with_stdio(false);
//	cin.tie(nullptr);
//	cout.tie(nullptr);
//	return 0;
//}

//#include <iostream>
//#include <assert.h>
//
//using namespace std;
//
//void Func(int a = 0)
//{
//	cout << a << endl;
//}
//
//// 全缺省
//void Func1(int a = 10, int b = 20, int c = 30)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
//
//// 半缺省
//void Func2(int a, int b = 10, int c = 20)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
//
//int main()
//{
//	Func(); // 没有传参时，使⽤参数的默认值
//	Func(10); // 传参时，使⽤指定的实参
//
//	Func1();
//	Func1(1);
//	Func1(1, 2);
//	Func1(1, 2, 3);
//	Func2(100);
//	Func2(100, 200);
//	Func2(100, 200, 300);
//
//	return 0;
//}

// Stack.h
//#include <iostream>
//#include <assert.h>
//using namespace std;
//typedef int STDataType;
//typedef struct Stack
//{
//	STDataType* a;
//	int top;
//	int capacity;
//}ST;
//void STInit(ST* ps, int n = 4);
//// Stack.cpp
//#include"Stack.h"
//// 缺省参数不能声明和定义同时给
//void STInit(ST* ps, int n)
//{
//	assert(ps && n > 0);
//	ps->a = (STDataType*)malloc(n * sizeof(STDataType));
//	ps->top = 0;
//	ps->capacity = n;
//}
//// test.cpp
//#include"Stack.h"
//int main()
//{
//	ST s1;
//	STInit(&s1);
//	// 确定知道要插⼊1000个数据，初始化时⼀把开好，避免扩容
//	ST s2;
//	STInit(&s2, 1000);
//	return 0;
//}

//#include"Queue.h"
//#include"Stack.h"
//// 全局定义了⼀份单独的Stack
//typedef struct Stack
//{
//	int a[10];
//	int top;
//}ST;
//void STInit(ST* ps) {}
//void STPush(ST* ps, int x) {}
//int main()
//{
//	// 调⽤全局的
//	ST st1;
//	STInit(&st1);
//	STPush(&st1, 1);
//	STPush(&st1, 2);
//	printf("%d\n", sizeof(st1));
//	// 调⽤bit namespace的
//	bit::ST st2;
//	printf("%d\n", sizeof(st2));
//	bit::STInit(&st2);
//	bit::STPush(&st2, 1);
//	bit::STPush(&st2, 2);
//	return 0;
//}

//#include<iostream>
//
//using namespace std;
//
//// 1、参数类型不同
//int Add(int left, int right)
//{
//	cout << "int Add(int left, int right)" << endl;
//	return left + right;
//}
//
//double Add(double left, double right)
//{
//	cout << "double Add(double left, double right)" << endl;
//	return left + right;
//}
//// 2、参数个数不同
//void f()
//{
//	cout << "f()" << endl;
//}
//void f(int a)
//{
//	cout << "f(int a)" << endl;
//}
//// 3、参数类型顺序不同
//void f(int a, char b)
//{
//	cout << "f(int a,char b)" << endl;
//}
//void f(char b, int a)
//{
//	cout << "f(char b, int a)" << endl;
//}
//
//int main()
//{
//	Add(1, 2);
//	Add(1.1, 2.2);
//
//	f();
//	f(1);
//
//	f(1,'x');
//	f('x',1);
//
//	return 0;
//}

#include<iostream>
using namespace std;
int main()
{
	int a = 0;
	// 引⽤：b和c是a的别名
	int& b = a;
	int& c = a;
	// 也可以给别名b取别名，d相当于还是a的别名
	int& d = b;
	++d;
	// 这⾥取地址我们看到是⼀样的
	cout << &a << endl;
	cout << &b << endl;
	cout << &c << endl;
	cout << &d << endl;
	return 0;
}